CSRF (Cross-Site Request Forgery) কী?
CSRF (Cross-Site Request Forgery) হল একটি ধরনের নিরাপত্তা আক্রমণ, যেখানে আক্রমণকারী একজন বৈধ ব্যবহারকারীর ব্রাউজারের মাধ্যমে একটি ম্যালিসিয়াস রিকোয়েস্ট পাঠায়। এটি মূলত ওয়েব অ্যাপ্লিকেশনগুলোকে লক্ষ্য করে যেখানে ব্যবহারকারী ইতিমধ্যে লগইন অবস্থায় থাকে। CSRF আক্রমণটি সাধারণত ইউজারের অজান্তে ঘটে, এবং এর মাধ্যমে আক্রমণকারী ওয়েবসাইটে পরিবর্তন আনতে পারে, যেমন ফর্ম সাবমিশন, টাকার স্থানান্তর বা অ্যাকাউন্টের সেটিং পরিবর্তন।
CSRF আক্রমণ সাধারণত ইউজারের সক্রিয় সেশন এবং কুকি ব্যবহার করে অবৈধ অনুরোধ করতে পারে, যা সার্ভার বৈধ মনে করে এবং অনুমোদন দেয়।
CSRF আক্রমণের কাজের পদ্ধতি
CSRF আক্রমণ সাধারণত কয়েকটি ধাপে ঘটে:
- ইউজার লগইন অবস্থায় থাকে: ইউজার ওয়েব অ্যাপ্লিকেশনে লগইন থাকে এবং একটি বৈধ সেশন রয়েছে, যেমন একটি কুকি।
- ম্যালিসিয়াস ওয়েবসাইটে প্রবেশ: ইউজার একটি আক্রমণকারী ওয়েবসাইটে যান যা তাদের ব্রাউজারে অনুপস্থিত থাকে।
- ম্যালিসিয়াস রিকোয়েস্ট তৈরি: আক্রমণকারী ওয়েবসাইট ইউজারের ব্রাউজারের মাধ্যমে বৈধ ওয়েব অ্যাপ্লিকেশনের সাথে একটি অনুরোধ পাঠায়। উদাহরণস্বরূপ, টাকার স্থানান্তর বা অ্যাকাউন্টের সেটিং পরিবর্তন।
- সার্ভার এটি বৈধ মনে করে: কারণ ইউজারের ব্রাউজারে বৈধ কুকি থাকে, সার্ভার এটি একটি বৈধ অনুরোধ হিসেবে গ্রহণ করে এবং কার্যকর করে।
CSRF প্রতিরোধের কৌশল
১. CSRF টোকেন ব্যবহার করা
CSRF আক্রমণ প্রতিরোধের জন্য একটি সুরক্ষিত পদ্ধতি হল CSRF টোকেন ব্যবহার করা। এটি একটি র্যান্ডম এবং এক্সপায়ারিং টোকেন, যা সার্ভার থেকে জেনারেট করা হয় এবং ইউজারের ফর্ম বা অনুরোধে যুক্ত করা হয়। যখন ব্যবহারকারী ফর্ম সাবমিট করেন, তখন এই টোকেনটি সার্ভারে যাচাই করা হয়। যদি টোকেনটি সঠিক না হয়, তাহলে অনুরোধটি প্রত্যাখ্যান করা হয়।
কিভাবে CSRF টোকেন কাজ করে?
- টোকেন তৈরি করা: যখন ব্যবহারকারী প্রথমবার পেজটি লোড করেন, তখন সার্ভার একটি সুরক্ষিত CSRF টোকেন তৈরি করে এবং এটি HTML ফর্মের সাথে ইনজেক্ট করে।
- টোকেন পাঠানো: ব্যবহারকারী ফর্মটি সাবমিট করার সময়, টোকেনটি ফর্মের সাথে পাঠানো হয়।
- টোকেন যাচাই করা: সার্ভার প্রাপ্ত টোকেন যাচাই করে। যদি টোকেন সঠিক না হয়, সার্ভার অনুরোধটি প্রত্যাখ্যান করে।
<form method="POST" action="/transfer-money">
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
<!-- অন্যান্য ফর্ম ফিল্ড -->
<button type="submit">Transfer</button>
</form>
এখানে, csrf_token হল সার্ভার দ্বারা জেনারেট করা একটি এক্সপায়ারিং র্যান্ডম টোকেন।
২. SameSite কুকি পলিসি
SameSite কুকি পলিসি CSRF আক্রমণ প্রতিরোধে কার্যকর। এই পলিসিটি নিশ্চিত করে যে কুকি শুধুমাত্র সেই ডোমেইন থেকে পাঠানো হবে যেখান থেকে অনুরোধ এসেছে। এর মানে হলো, আপনি যখন অন্য একটি ওয়েবসাইট থেকে আপনার অ্যাপ্লিকেশনটিতে কোনো রিকোয়েস্ট করবেন, তখন কুকি পাঠানো হবে না।
SameSite কুকি পলিসি তিনটি ধরনের হতে পারে:
- Strict: কুকি শুধুমাত্র সেই ডোমেইন থেকে পাঠানো হবে যেখানে কুকি সেট করা হয়েছে।
- Lax: কিছু নির্দিষ্ট শর্তে কুকি পাঠানো হবে (যেমন, GET রিকোয়েস্ট)।
- None: কুকি ক্রস-সাইট অনুরোধের জন্যও পাঠানো হবে (তবে এই ক্ষেত্রে Secure ফ্ল্যাগও সেট করতে হবে)।
Set-Cookie: sessionId=abc123; SameSite=Strict; Secure;
এখানে, SameSite=Strict কুকি কেবলমাত্র সেই ডোমেইন থেকে পাঠানো হবে যেখানে এটি সৃষ্ট হয়েছিল।
৩. Referrer-Policy ব্যবহার করা
Referrer-Policy হেডার ব্যবহার করে আপনি নিয়ন্ত্রণ করতে পারেন যে ব্রাউজার কোন রেফারার তথ্য (যেমন, ইউআরএল) সার্ভারে পাঠাবে। এই পলিসি CSRF আক্রমণ প্রতিরোধে সহায়ক হতে পারে।
Referrer-Policy: no-referrer-when-downgrade
এটি নিশ্চিত করে যে কেবল HTTPS থেকে HTTPS অনুরোধ পাঠানো হবে এবং HTTP থেকে HTTPS রিকোয়েস্টে রেফারার ডাটা পাঠানো হবে না।
৪. আইডেন্টিটি ভেরিফিকেশন
ব্যবহারকারী যদি কোনও সংবেদনশীল বা গুরুত্বপূর্ণ অ্যাকশন (যেমন, অ্যাকাউন্ট সেটিং পরিবর্তন বা ফান্ড ট্রান্সফার) সম্পাদন করেন, তবে তার আইডেন্টিটি যাচাই করা গুরুত্বপূর্ণ। এর জন্য OTP (One Time Password) বা পাসওয়ার্ড পুনঃপ্রমাণীকরণ ব্যবহার করা যেতে পারে।
- OTP: ইমেইল বা ফোনের মাধ্যমে এককালীন পাসওয়ার্ড পাঠানো হয়, যা শুধুমাত্র নির্দিষ্ট সময়ের মধ্যে ব্যবহৃত হতে পারে।
- পাসওয়ার্ড পুনঃপ্রমাণীকরণ: ব্যবহারকারীকে তাদের পাসওয়ার্ড পুনরায় প্রদান করতে বলা হয়।
৫. ক্লায়েন্ট সাইড রিকোয়েস্ট যাচাই
ক্লায়েন্ট সাইডে (যেমন, ব্রাউজারে) JavaScript ব্যবহার করে আপনি নিশ্চিত করতে পারেন যে কোন অনুরোধ CSRF আক্রমণের মাধ্যমে এসেছে কিনা। যদিও এটি সম্পূর্ণ নিরাপদ নয়, তবে এটি কিছু ক্ষেত্রে অতিরিক্ত নিরাপত্তা প্রদান করতে পারে।
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
fetch('/transfer-money', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': csrfToken
},
body: JSON.stringify({ amount: 100 })
});
এখানে, CSRF টোকেন ক্লায়েন্ট সাইডে একটি meta ট্যাগ থেকে নেয়া হয়েছে এবং সেটি রিকোয়েস্টে পাঠানো হচ্ছে।
সারাংশ
CSRF (Cross-Site Request Forgery) একটি ক্ষতিকর আক্রমণ যা ওয়েব অ্যাপ্লিকেশনের নিরাপত্তাকে বিপন্ন করতে পারে, বিশেষত যখন ব্যবহারকারী ইতিমধ্যে লগইন অবস্থায় থাকে। তবে, সঠিক প্রতিরোধমূলক কৌশলগুলি যেমন CSRF টোকেন, SameSite কুকি পলিসি, Referrer-Policy, এবং আইডেন্টিটি ভেরিফিকেশন প্রয়োগ করে এই আক্রমণকে প্রতিরোধ করা সম্ভব। এই নিরাপত্তা ব্যবস্থাগুলি ব্যবহারকারীর সেশন এবং ওয়েব অ্যাপ্লিকেশনকে সুরক্ষিত রাখতে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more